// 数组定义方法
let strings:string[];

let numbers:Array<number>;

let users:Array<{name:string;age:number}>;

// 泛型，是解决在定义之初，不明确类型的问题
/**
 * 1.函数的参数类型不明确
 * 2.类的属性类型不明确
 * 3.类的方法的返回值类型不明确
 * 4.工具类型在做类型处理的时候，不明确类型
 */
// 泛型是在定义时不明确类型，在使用时才明确类型


// 泛型定义函数
function sayHello<Username>(username:Username){
    return username;
}
const res=sayHello("hi")

// 箭头函数泛型
const sayHi=<Username>(username:Username)=>username;

// 类
type BasicId=string | number;
class Block<Id=string,name=BasicId>{ //Id=string，代表默认类型为string
    private id:Id;
    constructor(id:Id){
        this.id=id;
    }
    say(){
        return this.id
    }
}

const block=new Block<string>("123");
block.say();

function getLength<T extends {length:number}>(arg:T):number{
    console.log(typeof(arg))
    // console.log(typeof({length:number}))
    return arg.length;
}


// 多个泛型类型：
function log<T,U>(data1:T,data2:U):T | U { //返回类型可以是  T和U 的联合类型
    console.log("多个泛型")
    return data1;
}

log<number,string>(100,"hi")

